<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>WebShare Test: canShare without files</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
  </head>
  <body>
    <script>
      'use strict';

      test(() => {
        assert_false(navigator.canShare());
      }, 'canShare with no arguments (same as empty dictionary)');

      test(() => {
        assert_false(navigator.canShare({}));
      }, 'canShare with an empty dictionary');

      test(() => {
        assert_false(navigator.canShare(undefined));
      }, 'canShare with a undefined argument (same as empty dictionary)');

      test(() => {
        assert_false(navigator.canShare(null));
      }, 'canShare with a null argument (same as empty dictionary)');

      test(() => {
        assert_false(navigator.canShare({unused: 'unexpected field'}));
      }, 'canShare with a dictionary containing only surplus fields');

      test(() => {
        // URL is invalid in that the URL Parser returns failure (port is too
        // large).
        const url = 'http://example.com:65536';
        assert_false(navigator.canShare({url}));
      }, 'canShare with an invalid URL');

      test(() => {
        assert_false(navigator.canShare({url: 'data:the url'}));
      }, 'canShare with data URL');

      test(() => {
        assert_false(navigator.canShare({title: undefined}));
      }, 'canShare with attribute undefined is equivalent to omitting the attribute');

      test(() => {
        assert_true(navigator.canShare({title: 'subject'}));
      }, 'canShare with title');

      test(() => {
        assert_true(navigator.canShare({text: 'body'}));
      }, 'canShare with text');

      test(() => {
        assert_true(navigator.canShare({url: 'https://www.example.com/some/path?some_query#some_fragment'}));
      }, 'canShare with URL');

      test(() => {
        assert_true(navigator.canShare({title: null}));
      }, 'canShare with null attribute');

      test(() => {
        assert_true(navigator.canShare({text: 123}));
      }, 'canShare with number');

      test(() => {
        assert_true(navigator.canShare({url: {toString() { return 'https://example.com/'; }}}));
      }, 'canShare with object');

      test(() => {
        assert_true(navigator.canShare({title: 'subject', text: 'body', url: 'https://example.com/', unused: 'unexpected field'}));
      }, 'canShare with unexpected field');

      test(() => {
        assert_true(navigator.canShare({url: ''}));
      }, 'canShare with empty URL');

      test(() => {
        assert_true(navigator.canShare({url: '//www.example.com/some/path?some_query#some_fragment'}));
      }, 'canShare with URL having no scheme');
    </script>
  </body>
</html>
